package com.david.utils;

import cn.dev33.satoken.interceptor.SaAnnotationInterceptor;
import cn.dev33.satoken.interceptor.SaRouteInterceptor;
import cn.dev33.satoken.router.SaRouterUtil;
import cn.dev33.satoken.stp.StpUtil;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.Arrays;


/**
 * @author David
 */
@Configuration
public class MyWebConfigurer implements WebMvcConfigurer {

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry){
        // 下面一行是服务器上的资源映射路径
        registry.addResourceHandler("/admin/images/**").addResourceLocations("file:/home/lighthouse/ww/images/");

        // 下面一行是本机的资源映射路径
//        registry.addResourceHandler("/admin/images/**").addResourceLocations("file:D:\\images\\");
    }

    /**
     * 注册sa-token拦截器,所有静态资源没有进行拦截
     * @param registry 注册器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 开启路由鉴权，自定义验证规则
        registry.addInterceptor(new SaRouteInterceptor((request, response, handler) -> {

            // 登录验证 -- 拦截所有接口（没有登录任何接口无法使用，除了登录、注册接口）
            SaRouterUtil.match(Arrays.asList("/Admin/**"), Arrays.asList("/Admin/login", "/Admin/saveHr"), StpUtil::checkLogin);

            // 角色认证 -- 拦截以 super 开头的路由，必须具备[super-admin]角色才可以通过认证
            SaRouterUtil.match("/Admin/super/**", () -> StpUtil.checkRoleOr("super-admin"));

        })).addPathPatterns("/**");

        // 开启注解鉴权
        registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");
    }

    /**
     * 重写欢迎页面
     * @param registry 视图控制器
     */
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("login.html");
        WebMvcConfigurer.super.addViewControllers(registry);
    }

}
